package com.njwb.day08.system.dao.impl;

import com.njwb.day08.system.dao.StudentDao;
import com.njwb.day08.system.entity.Student;

public class StudentDaoImpl implements StudentDao {

    //初始化存放学生数据的学生数组
    private static Student[] stus=new Student[0];

    @Override
    public Student[] selectAll() {
        return stus;
    }

    @Override
    public int selectByNo(int no) {
        //学号重复性录入
        for (int i=0;i<stus.length;i++){
            Student stu=stus[i];
            if(no==stu.getNo()){
                return i;
            }
        }
        return -1;
    }

    @Override
    public void insert(Student student) {
        //动态数组
        //自定义临时学生数组比原来数组长度+1
        Student[] tempStus=new Student[stus.length+1];
        //将原学生数组的每一个学生对象拷贝到临时学生数组中
        for (int i=0;i< stus.length;i++){
            tempStus[i]=stus[i];
        }
        tempStus[tempStus.length-1]=student;
        //将临时数组的数据交给初始化的数组变量
        stus=tempStus;
    }

    @Override
    public void updateStudent(Student student, int index) {
        stus[index]=student;
    }

    @Override
    public void deleteStudent(int index) {
//自定义临时学生数组比原来学生数组长度-1
        Student[] tempStus=new Student[stus.length-1];
        for (int i=0;i<tempStus.length;i++){
            if(i<index){
                tempStus[i]=stus[i];
            }else{
                tempStus[i]=stus[i+1];
            }
        }
        //将临时学生数组的数据交给初始化的学生数组变量
        stus=tempStus;
    }

    @Override
    public Student selectByNameOrNo(String name,int no) {
        for (int i=0;i<stus.length;i++){
            if(name!=null&&name.equals(stus[i].getName())){
                    return stus[i];
            }else{
                if(no==stus[i].getNo()){
                    return stus[i];
                }
            }
        }
        return null;
    }

    @Override
    public Student[] selectStudentAsc() {
        Student[] tempStus = stus;
        for (int i = 0; i < tempStus.length - 1; i++) {
            for (int j = i + 1; j < tempStus.length; j++) {
                //当前位置学生
                Student stu=tempStus[i];
                //当前位置学生的成绩
                double dq = stu.getScore();
                //需要比的学生
                Student stu2=tempStus[j];
                //需要比的学生位置的成绩
                double bj = stu2.getScore();
                if (dq > bj) {
                    //学生排序
                    Student tempStu = tempStus[i];
                    tempStus[i] = tempStus[j];
                    tempStus[j] = tempStu;
                }
            }
        }
        return stus;
    }

}
